home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer (Italian) 30 / PC Gamer IT CD 30 1-2.iso / MOTS / GAMEDATA / RESOURCE / JKMRES.GOO / cog_pow_thermal_m.cog < prev    next >
Text File  |  1998-02-25  |  6KB  |  209 lines

  1. # Jedi Knight MOTHS Cog Script
  2. #
  3. # POW_THERMAL_m.COG
  4. #
  5. # POWERUP Script - Thermal Detonators
  6. #
  7. # [YB, CYW, SRS]
  8. #
  9. # (C) 1997 LucasArts Entertainment Co. All Rights Reserved
  10.  
  11.  
  12. symbols
  13.  
  14. template    explode=+medium_exp              local
  15. template    projectile=+grenade2             local
  16.  
  17. thing       powerup                          local
  18. thing       player                           local
  19. thing       sender                           local
  20.  
  21. int         bin=4                            local
  22. sound       pickupsnd=thrmlpu2.wav           local
  23. sound       respawnsnd=Activate01.wav        local
  24. flex        amount                           local
  25.  
  26. #for the projectiles
  27. vector      dir                              local
  28.  
  29. int         bin_contents=0                   local
  30. int         autopickup=0                     local
  31. int         damage                           local
  32.  
  33. message     created
  34. message     damaged
  35. message     touched
  36. message     taken
  37. message     respawn
  38. message     timer
  39.  
  40. end
  41.  
  42. # ========================================================================================
  43.  
  44. code
  45.  
  46. created:
  47.    SetThingUserData(GetSenderRef(), 30);     // set the initial user data (i.e. "health")
  48.    Return;
  49.  
  50. # ............................................................................................
  51.  
  52. touched:
  53.    if (GetWeaponBin(bin) == -1)
  54.       return;
  55.  
  56.    player = GetSourceRef();
  57.  
  58.    if (GetThingType(player) == 10)  // Can only be taken by players.
  59.    {
  60.       amount = GetInv(player, GetWeaponBin(bin));
  61.  
  62.       if (IsMulti() || (amount < GetInvMax(player, GetWeaponBin(bin))))
  63.       {
  64.          TakeItem(GetSenderRef(), -1);
  65.          call taken;
  66.       }
  67.    }
  68.  
  69.    Return;
  70.  
  71. # ........................................................................................
  72.  
  73. damaged:
  74.    damage = GetParam (0);
  75.    sender = GetSenderRef();
  76.  
  77.    // only take damage 33% of the time
  78.    if(rand() < 0.33)
  79.       return;
  80.  
  81.    // If it's already dead, don't allow any more damage.
  82.    if (!GetThingUserData (sender))
  83.       return;
  84.  
  85.    // see if this will cause the explosion
  86.    if (GetThingUserData (sender) <= damage)
  87.    {
  88.       SetThingUserData (sender, 0);
  89.  
  90.       // timer for base explosion
  91.       SetTimerEx ((Rand () * 0.5), sender, 1, 0);
  92.    }
  93.    else
  94.    {
  95.       SetThingUserData (sender, GetThingUserData (sender) - damage);
  96.    }
  97.  
  98.    ReturnEx (0);
  99.    return;
  100.  
  101. # ........................................................................................
  102.  
  103. taken:
  104.    if (GetWeaponBin(bin) == -1)
  105.       return;
  106.  
  107.    player = GetSourceRef();
  108.    powerup = GetSenderRef();
  109.  
  110. // // If the object has been destroyed, don't award it to the player.
  111. //   if (!GetThingUserData (powerup))
  112. //    return;
  113.  
  114.    // Print("Thermal Detonators");
  115.    jkPrintUNIString(player, GetWeaponBin(bin));
  116.  
  117.    // Do effects.
  118.    PlaySoundLocal(pickupsnd, 1, 0, 0);
  119.    AddDynamicTint(player, 0.0, 0.0, 0.2);
  120.  
  121.    // store the old bin contents
  122.    bin_contents = GetInv(player, GetWeaponBin(bin));
  123.  
  124.    // Increment powerup amount.
  125.    ChangeInv(player, GetWeaponBin(bin), 3.0);
  126.  
  127.    // Check for Auto Pickup
  128.    autopickup = GetAutoPickup();
  129.    if((autopickup & 1) && !(autopickup & 2)) // DANGEROUS
  130.    {
  131.       if(!bin_contents)
  132.       {
  133.          if(!((autopickup & 4) && (GetWeaponPriority(player, GetWeaponBin(GetCurWeapon(player)), 0) >= GetWeaponPriority(player, bin, 0))))
  134.          {
  135.             if(!((autopickup & 8) && (GetWeaponBin(GetCurWeapon(player)) == jkGetMultiParam(1))))
  136.             {
  137.                SelectWeapon(player, GetWeaponBin(bin));
  138.                Return;
  139.             }
  140.          }
  141.       }
  142.    }
  143.  
  144.    // Check for Auto Reload
  145.    if(GetAutoReload() & 1)
  146.    {
  147.       if(!bin_contents)
  148.       {
  149.          if(!((GetAutoReload() & 2) && (GetWeaponBin(GetCurWeapon(player)) == jkGetMultiParam(1))))
  150.          {
  151.             // Try to autoselect and see if the best weapon is the TD
  152.             if(AutoSelectWeapon(player, 2) == bin) SelectWeapon(player, GetWeaponBin(bin));
  153.          }
  154.       }
  155.    }
  156.  
  157.    return;
  158.  
  159. # ........................................................................................
  160.  
  161. respawn:
  162.    SetThingUserData(GetSenderRef(), 30);     // set the initial user data (i.e. "health")
  163.    PlaySoundThingLocal(respawnsnd, GetSenderRef(), 0.6, 5.0, 10.0, 0);
  164.  
  165.    return;
  166.  
  167. # ........................................................................................
  168.  
  169. timer:
  170.    sender = GetSenderId ();
  171.    damage = GetParam (0);
  172.  
  173.    if (damage == 1)
  174.    {
  175.       // cause the base explosion
  176.       powerup = CreateThing (explode, sender);
  177.       SetTimerEx (0.25, sender, 2, 0);
  178.    }
  179.    else
  180.    if (damage == 2)
  181.    {
  182.       if ((Rand () * 100) <= 75)
  183.       {
  184.          // and sling projectile 1
  185.          powerup = CreateThingNR(projectile, sender);
  186.  
  187.          // x & y generate a number from -1 -> 1, z is 0 -> 1
  188.          dir = VectorSet (((Rand () * 2) - 1), ((Rand () * 2) - 1), Rand ());
  189.          SetThingVel (powerup, VectorScale (dir, (Rand () * 5) + 3));
  190.       }
  191.  
  192.       if ((Rand () * 100) <= 75)
  193.       {
  194.          // and sling projectile 2
  195.          powerup = CreateThingNR(projectile, sender);
  196.  
  197.          // x & y generate a number from -1 -> 1, z is 0 -> 1
  198.          dir = VectorSet (((Rand () * 2) - 1), ((Rand () * 2) - 1), Rand ());
  199.          SetThingVel(powerup, VectorScale (dir, (Rand () * 5) + 3));
  200.       }
  201.  
  202.       TakeItem (sender, -1);
  203.    }
  204.    return;
  205.  
  206. end
  207.  
  208.  
  209.